iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Software Development

我命由我不由語言 java爬蟲挑戰系列 第 7

java爬蟲挑戰 Day 7 - 使用selenium處理動態網頁

  • 分享至 

  • xImage
  •  

昨天成功使用Jsoup拿到Html的內容。
其實只會印出靜態網頁的結果,如之前檢視原始碼的結果:
https://ithelp.ithome.com.tw/upload/images/20240824/20168635Re34pdXkdN.png

沒辦法拿到我們想要的目標,如這些:
https://ithelp.ithome.com.tw/upload/images/20240824/20168635lRAudBt4tg.png

動態網頁的處理-Selenium

所以處裡動態網頁需要用到Selenium。

Selenium 主要目的為進行自動化測試,模擬用戶在瀏覽器中的操作,例如點擊、輸入文字、提交表單等,現在也很常用在爬蟲。

設置 WebDriver

如上述,Selenium模擬用戶在瀏覽器中的操作,所以如果使用Chrome瀏覽器來模擬的話,就需要再安裝Chrome的WebDriver,讓Selenium有一個媒介操控我們的瀏覽器。

下載Chrome的WebDriver

Chrome版本在115以上可以到下列網址下載
https://googlechromelabs.github.io/chrome-for-testing/
我使用下列版本
https://storage.googleapis.com/chrome-for-testing-public/128.0.6613.84/win64/chromedriver-win64.zip
要注意Chrome版本要跟chromedriver版本一致

將壓縮檔解壓縮至我的專案目錄 (這個我不推上git)
https://ithelp.ithome.com.tw/upload/images/20240824/20168635V70M3ShGPV.png

程式碼實作

我就全部用註解說明程式碼了,調整方法fetchRentalData

public void fetchRentalData() {
    log.info("Starting to fetch rental data...");

    // 設定 ChromeDriver 路徑
    System.setProperty("webdriver.chrome.driver", "./chromedriver-win64/chromedriver.exe");

    // 設定 ChromeOptions
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless"); // 如果你不想看到瀏覽器,可以啟用無頭模式
    options.addArguments("--disable-gpu"); // 避免某些操作系統的問題
    options.addArguments("--window-size=1920,1080"); // 設置窗口大小

    WebDriver driver = new ChromeDriver(options);
    try {
        //這邊使用591的條件other=newPost:新上架、sort=posttime_desc:排序為新到舊
        String urlString = "https://rent.591.com.tw/list?other=newPost&sort=posttime_desc";
        //使用webDriver前往該網址
        driver.get(urlString);
        
        // 等待 JavaScript 加載完畢,最多等10秒
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));

        // 取得網頁的 HTML
        String pageSource = driver.getPageSource();

        // 使用 Jsoup 解析 HTML
        Document doc = Jsoup.parse(pageSource);
        
        // 在這裡解析HTML並提取所需數據
        parseHTML(doc);
        log.info("Successfully fetched rental data");

    } catch (Exception e) {
        log.error("Error while fetching rental data", e);
    } finally {
        // 關閉 WebDriver
        driver.quit();
    }
}

執行後,看app.log

https://ithelp.ithome.com.tw/upload/images/20240824/20168635HyzQQCp919.png

成功取得591的租屋刊登資訊了
https://ithelp.ithome.com.tw/upload/images/20240824/201686350g8aNI24uG.png

git現狀

https://ithelp.ithome.com.tw/upload/images/20240824/20168635IxThf3mHU4.png

小結

今天的進度主要集中在處理動態網頁,並成功配置了 Selenium WebDriver 來輔助資料的抓取。
接下來,我將專注於解析抓取到的 HTML 資料,提取出關鍵的租房信息,如價格、地址、描述等。


上一篇
java爬蟲挑戰 Day 6 - Java導入SSL証書
下一篇
java爬蟲挑戰 Day 8 - 使用Jsoup解析物件 (1)
系列文
我命由我不由語言 java爬蟲挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言